package org.tea.inventory.domain.tea;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import org.tea.inventory.base.validation.groups.CreateGroup;
import org.tea.inventory.base.validation.groups.UpdateGroup;
import org.tea.inventory.db.domain.Storage;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;

/**
 * 商品属性对象 product
 * 
 * @author dongxb
 * @date 2025-04-07
 */
@ApiModel(value = "商品信息表")
@Data
@NoArgsConstructor
public class Product implements Serializable {
    private static final long serialVersionUID = 1L;

    /** 主键 */
    @ApiModelProperty(value = "主键")
    private Long id;

    /** 商品编号 */
    @NotBlank(message = "商品编号不能为空")
    @ApiModelProperty(value = "商品编号")
    private String productCode;

    /** 商品名称 */
    @NotBlank(message = "商品名称不能为空")
    @ApiModelProperty(value = "商品名称")
    private String productName;

    /** 商品简称 */
    @ApiModelProperty(value = "商品简称")
    private String productShortForm;

    /** 商品类别编号 */
    @NotNull(message = "商品类别不能为空")
    @ApiModelProperty(value = "商品类别编号")
    private Long categoryId;
    
    /** 商品类别名称 */
    private String categoryName;

    /** 商品品牌id */
    @ApiModelProperty(value = "商品品牌id")
    private Long brandId;
    private String brandName;

    /** 商品状态：0启用，1停用 */
    @NotNull(message = "商品状态不能为空")
    @ApiModelProperty(value = "商品状态：0启用，1停用")
    private Integer status;
    private String statusStr;

    /** 是否删除：0未删除，1已删除 */
    @ApiModelProperty(value = "是否删除： 0未删除，1已删除")
    private Integer delFlag;

    /** 商品图片url */
    //@NotBlank(message = "商品图片不能为空")
    @ApiModelProperty(value = "商品图片url")
    private String imgUrl;

    /** 单价 */
    @NotNull(message = "商品单价不能为空")
    @ApiModelProperty(value = "单价")
    private BigDecimal price;

    /** 销售价 */
    @NotNull(message = "商品销售价不能为空")
    @ApiModelProperty(value = "销售价")
    private BigDecimal salePrice;

    /** 成本 */
    @NotNull(message = "商品成本不能为空")
    @ApiModelProperty(value = "成本")
    private BigDecimal costPrice;

    /** 重量 */
    @NotNull(message = "商品重量不能为空")
    @ApiModelProperty(value = "重量")
    private Long weight;

    /** 商品品牌id */
    @ApiModelProperty(value = "商品品牌id")
    private Long teaTypeId;

    /** 商品级别 */
    @ApiModelProperty(value = "商品级别")
    private String teaLevel;

    /** 商品系列 */
    @ApiModelProperty(value = "商品系列")
    private String teaSeries;

    /** 打包方式 */
    @ApiModelProperty(value = "打包方式")
    private String[] teaPackageFormat;

    /** 产地 */
    @ApiModelProperty(value = "产地")
    private String teaOrigin;

    /** 采摘季节 */
    @ApiModelProperty(value = "采摘季节")
    private String teaGetSeason;

    /** 保质期数值 */
    @ApiModelProperty(value = "保质期数值")
    private String teaGuaranteeNumber;

    /** 保质期单位 */
    @ApiModelProperty(value = "保质期单位")
    private String teaGuaranteeUnit;

    /** 保质期 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @ApiModelProperty(value = "生产日期")
    private Date productDate;

    /** 陈化年份 */
    @ApiModelProperty(value = "陈化年份")
    private String teaAgingYear;

    /** 溯源信息文件 */
    @ApiModelProperty(value = "溯源信息文件")
    private String teaFiles;

    @ApiModelProperty(value = "溯源信息文件信息")
    private List<Storage> files;

    /** 存储要求 */
    @ApiModelProperty(value = "存储要求")
    private String[] teaStorageRequire;

    /** 创建时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
    @ApiModelProperty(value = "创建时间")
    private Date createDate;
    private String createDateStr;

    /** 创建者 */
    @ApiModelProperty(value = "创建者")
    private String createUserId;

    /** 更新时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
    @ApiModelProperty(value = "更新时间")
    private Date updateDate;

    /** 更新者 */
    @ApiModelProperty(value = "更新者")
    private String updateUserId;

}
